Zjisteni prihlaseneho uzivatele pod win 2000

Otázka od: petr polasek

4. 12. 2002 16:18


pres ten NetSessionEnum mi to nejde, zkousel to nekdo? mozna ze
delam neco spatne, muzes mi poslat, jak na to. Diky

----- PŮVODNÍ ZPRÁVA -----
Od: "Ondrej Kelle" <O.Kelle@digitalpublishing.de>
Komu: "'delphi-l@clexpert.cz'" <delphi-l@clexpert.cz>
Předmět: RE: Zjisteni prihlaseneho uzivatele pod
Datum: 4.12.2002 - 15:23:03

> > Zdravim, uz jsem se jednou ptal, ale jeste
> > jednou zadam o pomoc.
> > Nevi nekdo jak cist sessiony ze serveru
> > win2000. Potrebuji napsat
> > funkci, ktera by me overovala zda je
> > uzivatel prihlasen na
> > server, a pokud ano tak z ktereho pocitace,
> > pripadne z ktere IP
> > adresy. Pokud nekdo vi o komponente, ktera
> > by tohle resila, dejte
> > mi prosim vedet.
>
> Malo by to ist cez NetSessionEnum, level 10.
> V MSDN je na to priklad v
> cecku.
>
> HTH
> TOndrej
>

--
----
Vyhraj 2listky na Breakbeat Conference
7.12.2002 v Roxy. zacatek od 22:00
Soutez na http://web.volny.cz
Vice informaci o akci na www.lighthouse.cz

Odpovedá: Vymazal Milan

5. 12. 2002 15:56

Cau Martin,

Thursday, December 5, 2002, 1:29:21 PM, you wrote:

> Zjisteni pocitacu prilogovanych k serveru.
> Mase

> ----- Original Message -----
> From: "Ondrej Kelle" <O.Kelle@digitalpublishing.de>
>> >> pres ten NetSessionEnum mi to nejde, zkousel to nekdo? mozna ze
>> >> delam neco spatne, muzes mi poslat, jak na to. Diky
>>
>> Skus to nejako takto:
>>
>> const
>> NERR_SUCCESS = 0;
>> MAX_PREFERRED_LENGTH = -1;
>>
>> type
>> PSessionInfo10 = ^TSessionInfo10;
>> TSessionInfo10 = packed record
>> sesi10_cname: PWideChar;
>> sesi10_username: PWideChar;
>> sesi10_time: DWORD;
>> sesi10_idle_time: DWORD;
>> end;
>>
>> function NetSessionEnum(servername, UncClientName, username: PWideChar;
>> level: DWORD; var bufptr: Pointer;
>> prefmaxlen: DWORD; var entriesread, totalentries, resume_handle: DWORD):
>> Integer; stdcall; external 'netapi32.dll';
>> function NetApiBufferFree(Buffer: Pointer): Integer; stdcall; external
>> 'netapi32.dll';
>>
>> // returns comma-delimited list of computer names on which the given user is
>> connected to the server
>> function GetUserComputerNames(const ServerName, UserName: string): string;
>> var
>> WServerName: WideString;
>> WUserName: WideString;
>> Buf: Pointer;
>> NetResult: Integer;
>> EntriesRead, TotalEntries, ResumeHandle: Cardinal;
>> I: Integer;
>> P: PSessionInfo10;
>> begin
>> Result := '';
>> WServerName := ServerName;
>> WUserName := UserName;
>> EntriesRead := 0;
>> TotalEntries := 0;
>> ResumeHandle := 0;
>> NetResult := NetSessionEnum(PWideChar(WServerName), nil,
>> PWideChar(WUserName), 10, Buf,
>> Cardinal(MAX_PREFERRED_LENGTH), EntriesRead, TotalEntries,
>> ResumeHandle);
>> if NetResult = NERR_SUCCESS then
>> try
>> P := Buf;
>> for I := 0 to EntriesRead - 1 do
>> begin
>> if Result <> '' then
>> Result := Result + ',';
>> Result := Result + P^.sesi10_cname;
>> Inc(P);
>> end;
>> finally
>> NetApiBufferFree(Buf);
>> end;
>> end;
>>
>> procedure TForm1.Button1Click(Sender: TObject);
>> begin
>> ShowMessage(GetUserComputerNames(EditServer.Text, EditUser.Text));
>> end;
>>
>> > no to zalezi na hodne vecech. hlavne ten remote pocitac musi mit
>> > povoleny pristup pres NetBIOS
>>
>> Myslim, ze Net* funkcie nepotrebuju NetBIOS. U nas v sieti ten priklad chodi
>> a mame len TCP/IP.


No to nevim jak teda sdilite soubory ? NetBIOS je vypnuty pouze pokud
je nastavena volba "Zakazat NetBIOS nad protokolem TCP/IP". Pokud ne
tak vsechno bezi pres NetBIOS, sdileni tiskarny, informace o userech,
netsessions atd.



S pozdravem
  
 Milan Vymazal

Odpovedá: Vymazal Milan

6. 12. 2002 8:49

Cau TOndrej,

Thursday, December 5, 2002, 7:49:58 PM, you wrote:

>>> Myslim, ze Net* funkcie nepotrebuju NetBIOS. U nas v sieti ten priklad
> chodi
>>> a mame len TCP/IP.
>>
>> No to nevim jak teda sdilite soubory ? NetBIOS je vypnuty pouze pokud
>> je nastavena volba "Zakazat NetBIOS nad protokolem TCP/IP". Pokud ne
>> tak vsechno bezi pres NetBIOS, sdileni tiskarny, informace o userech,
>> netsessions atd.

> Zda sa, ze som si poplietol NetBIOS s NetBEUI...
> Ospravedlnujem sa za nespravnu informaciu, NetBIOS nad TCP/IP v nasej sieti
> pouzivame.
> Podla toho, co som si zbezne precital v MSDN (siete nie su moja silna
> stranka), ziskal som dojem, ze mas pravdu, ze vsetky spomenute funkcie
> "Microsoft Network" vyzaduju NetBIOS (to zrejme znamena, ze aj Net* funkcie
> vratane NetSessionEnum).
> Nie som si tym isty, dostatocne tomu nerozumiem a nemam teraz cas sa tym
> zaoberat.

No jestli jsem to spravne pochopil tak chces zjistit prihlaseneho
uzivatle pod Win2000. Na to potrebujes par veci. 1. Na te masine by
mela bezet sluzba Remote Registry Service
2. NetBIOS by mel byt povoleny nad protokolem TCP/IP

3. Musis byt prvkem site, tzn. musis byt prihlaseny do domeny, pokud
nejsi musi vzdaleny pocitac mit nastaveny RestrictAnonymous na 1 nebo
0. Coz je nebezpecne..

> Prajem pekny Delphi den,
> TOndrej






S pozdravem
  
 Milan Vymazal

Odpovedá: Ondrej Kelle

4. 12. 2002 15:21

> Zdravim, uz jsem se jednou ptal, ale jeste jednou zadam o pomoc.
> Nevi nekdo jak cist sessiony ze serveru win2000. Potrebuji napsat
> funkci, ktera by me overovala zda je uzivatel prihlasen na
> server, a pokud ano tak z ktereho pocitace, pripadne z ktere IP
> adresy. Pokud nekdo vi o komponente, ktera by tohle resila, dejte
> mi prosim vedet.

Malo by to ist cez NetSessionEnum, level 10. V MSDN je na to priklad v
cecku.

HTH
TOndrej

Odpovedá: Vymazal Milan

4. 12. 2002 17:23

Cau petr,

Wednesday, December 4, 2002, 3:36:26 PM, you wrote:


> pres ten NetSessionEnum mi to nejde, zkousel to nekdo? mozna ze
> delam neco spatne, muzes mi poslat, jak na to. Diky

no to zalezi na hodne vecech. hlavne ten remote pocitac musi mit
povoleny pristup pres NetBIOS

> ----- PŮVODNÍ ZPRÁVA -----
> Od: "Ondrej Kelle" <O.Kelle@digitalpublishing.de>
> Komu: "'delphi-l@clexpert.cz'" <delphi-l@clexpert.cz>
> Předmět: RE: Zjisteni prihlaseneho uzivatele pod
> Datum: 4.12.2002 - 15:23:03

>> > Zdravim, uz jsem se jednou ptal, ale jeste
>> > jednou zadam o pomoc.
>> > Nevi nekdo jak cist sessiony ze serveru
>> > win2000. Potrebuji napsat
>> > funkci, ktera by me overovala zda je
>> > uzivatel prihlasen na
>> > server, a pokud ano tak z ktereho pocitace,
>> > pripadne z ktere IP
>> > adresy. Pokud nekdo vi o komponente, ktera
>> > by tohle resila, dejte
>> > mi prosim vedet.
>>
>> Malo by to ist cez NetSessionEnum, level 10.
>> V MSDN je na to priklad v
>> cecku.
>>
>> HTH
>> TOndrej
>>





S pozdravem
  
 Milan Vymazal

Odpovedá: Ondrej Kelle

5. 12. 2002 10:14

>> pres ten NetSessionEnum mi to nejde, zkousel to nekdo? mozna ze
>> delam neco spatne, muzes mi poslat, jak na to. Diky

Skus to nejako takto:

const
  NERR_SUCCESS = 0;
  MAX_PREFERRED_LENGTH = -1;

type
  PSessionInfo10 = ^TSessionInfo10;
  TSessionInfo10 = packed record
    sesi10_cname: PWideChar;
    sesi10_username: PWideChar;
    sesi10_time: DWORD;
    sesi10_idle_time: DWORD;
  end;

function NetSessionEnum(servername, UncClientName, username: PWideChar;
level: DWORD; var bufptr: Pointer;
  prefmaxlen: DWORD; var entriesread, totalentries, resume_handle: DWORD):
Integer; stdcall; external 'netapi32.dll';
function NetApiBufferFree(Buffer: Pointer): Integer; stdcall; external
'netapi32.dll';

// returns comma-delimited list of computer names on which the given user is
connected to the server
function GetUserComputerNames(const ServerName, UserName: string): string;
var
  WServerName: WideString;
  WUserName: WideString;
  Buf: Pointer;
  NetResult: Integer;
  EntriesRead, TotalEntries, ResumeHandle: Cardinal;
  I: Integer;
  P: PSessionInfo10;
begin
  Result := '';
  WServerName := ServerName;
  WUserName := UserName;
  EntriesRead := 0;
  TotalEntries := 0;
  ResumeHandle := 0;
  NetResult := NetSessionEnum(PWideChar(WServerName), nil,
PWideChar(WUserName), 10, Buf,
    Cardinal(MAX_PREFERRED_LENGTH), EntriesRead, TotalEntries,
ResumeHandle);
  if NetResult = NERR_SUCCESS then
    try
      P := Buf;
      for I := 0 to EntriesRead - 1 do
      begin
        if Result <> '' then
          Result := Result + ',';
        Result := Result + P^.sesi10_cname;
        Inc(P);
      end;
    finally
      NetApiBufferFree(Buf);
    end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ShowMessage(GetUserComputerNames(EditServer.Text, EditUser.Text));
end;

> no to zalezi na hodne vecech. hlavne ten remote pocitac musi mit
> povoleny pristup pres NetBIOS

Myslim, ze Net* funkcie nepotrebuju NetBIOS. U nas v sieti ten priklad chodi
a mame len TCP/IP.

HTH
TOndrej

Odpovedá: Martin Schayna

5. 12. 2002 14:42

Zjisteni pocitacu prilogovanych k serveru.
Mase

----- Original Message -----
From: "Ondrej Kelle" <O.Kelle@digitalpublishing.de>
> >> pres ten NetSessionEnum mi to nejde, zkousel to nekdo? mozna ze
> >> delam neco spatne, muzes mi poslat, jak na to. Diky
>
> Skus to nejako takto:
>
> const
> NERR_SUCCESS = 0;
> MAX_PREFERRED_LENGTH = -1;
>
> type
> PSessionInfo10 = ^TSessionInfo10;
> TSessionInfo10 = packed record
> sesi10_cname: PWideChar;
> sesi10_username: PWideChar;
> sesi10_time: DWORD;
> sesi10_idle_time: DWORD;
> end;
>
> function NetSessionEnum(servername, UncClientName, username: PWideChar;
> level: DWORD; var bufptr: Pointer;
> prefmaxlen: DWORD; var entriesread, totalentries, resume_handle: DWORD):
> Integer; stdcall; external 'netapi32.dll';
> function NetApiBufferFree(Buffer: Pointer): Integer; stdcall; external
> 'netapi32.dll';
>
> // returns comma-delimited list of computer names on which the given user is
> connected to the server
> function GetUserComputerNames(const ServerName, UserName: string): string;
> var
> WServerName: WideString;
> WUserName: WideString;
> Buf: Pointer;
> NetResult: Integer;
> EntriesRead, TotalEntries, ResumeHandle: Cardinal;
> I: Integer;
> P: PSessionInfo10;
> begin
> Result := '';
> WServerName := ServerName;
> WUserName := UserName;
> EntriesRead := 0;
> TotalEntries := 0;
> ResumeHandle := 0;
> NetResult := NetSessionEnum(PWideChar(WServerName), nil,
> PWideChar(WUserName), 10, Buf,
> Cardinal(MAX_PREFERRED_LENGTH), EntriesRead, TotalEntries,
> ResumeHandle);
> if NetResult = NERR_SUCCESS then
> try
> P := Buf;
> for I := 0 to EntriesRead - 1 do
> begin
> if Result <> '' then
> Result := Result + ',';
> Result := Result + P^.sesi10_cname;
> Inc(P);
> end;
> finally
> NetApiBufferFree(Buf);
> end;
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> begin
> ShowMessage(GetUserComputerNames(EditServer.Text, EditUser.Text));
> end;
>
> > no to zalezi na hodne vecech. hlavne ten remote pocitac musi mit
> > povoleny pristup pres NetBIOS
>
> Myslim, ze Net* funkcie nepotrebuju NetBIOS. U nas v sieti ten priklad chodi
> a mame len TCP/IP.

Odpovedá: Martin Schayna

5. 12. 2002 13:54

Omlouvam se, omylem jsem poslal kopii ktera byla
urcena kolegum.

Martin Schayna

----- Original Message -----
From: "Martin Schayna" <mschayna@aktis.cz>
> Zjisteni pocitacu prilogovanych k serveru.
> Mase

Odpovedá: TOndrej

5. 12. 2002 19:54

>> Myslim, ze Net* funkcie nepotrebuju NetBIOS. U nas v sieti ten priklad
chodi
>> a mame len TCP/IP.
>
> No to nevim jak teda sdilite soubory ? NetBIOS je vypnuty pouze pokud
> je nastavena volba "Zakazat NetBIOS nad protokolem TCP/IP". Pokud ne
> tak vsechno bezi pres NetBIOS, sdileni tiskarny, informace o userech,
> netsessions atd.

Zda sa, ze som si poplietol NetBIOS s NetBEUI...
Ospravedlnujem sa za nespravnu informaciu, NetBIOS nad TCP/IP v nasej sieti
pouzivame.
Podla toho, co som si zbezne precital v MSDN (siete nie su moja silna
stranka), ziskal som dojem, ze mas pravdu, ze vsetky spomenute funkcie
"Microsoft Network" vyzaduju NetBIOS (to zrejme znamena, ze aj Net* funkcie
vratane NetSessionEnum).
Nie som si tym isty, dostatocne tomu nerozumiem a nemam teraz cas sa tym
zaoberat.

Prajem pekny Delphi den,
TOndrej